/*
简单TCP服务器程序，可以用nc 127.0.0.1 8000来测试
*/
#include<stdio.h>
#include<ctype.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<arpa/inet.h>

#define S_PORT 8000
#define S_IP "127.0.0.1"
#define BUF_SIZE 1024
int main(){
  char buf[BUF_SIZE];//为什么int[buf]无法转换大小写
  int serv_fd,clie_fd;
  int ret,i,n;
  struct sockaddr_in serv_addr,clie_addr;

 socklen_t  clie_addr_len=sizeof(clie_addr);

  serv_fd=socket(AF_INET,SOCK_STREAM,0);
  if(serv_fd==-1){
    perror("socket error");
    exit(1);
  }


  serv_addr.sin_family=AF_INET;
  serv_addr.sin_port=htons(S_PORT);
  serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);

  ret=bind(serv_fd,(struct sockaddr*)&serv_addr,sizeof(serv_addr));
  if(ret!=0){
    perror("bind error");
    exit(1);
  }

  ret=listen(serv_fd,128);
  if(ret!=0){
    perror("listen error");
    exit(1);
  }


  clie_fd=accept(serv_fd,(struct sockaddr *)&clie_addr,&clie_addr_len);//获取客户端的addr和len，一个是传出参数，一个是传入传出参数
  if(clie_fd==-1){
    perror("bind error");
    exit(1);
  }

  while(1){//下面的read和write都是用accept返回的sock_fd，即客户的sock_fd
    n=read(clie_fd,buf,sizeof(buf));
    if(n==-1){
	perror("read error");
	exit(1);
      }

    for(i=0;i<n;i++){
      buf[i]=toupper(buf[i]+1);
    }

    write(clie_fd,buf,n);
      }
    return 0;
  }



 
